package com.priox.sigar.infraestructura.services;


import com.mm.support.mapper.DTOMapperService;
import com.priox.sigar.client.dto.AgrupacionClienteDTO;
import com.priox.sigar.client.dto.AgrupacionDTO;
import com.priox.sigar.domain.model.*;
import com.priox.sigar.domain.service.AgrupacionClienteService;
import com.priox.sigar.domain.service.AgrupacionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * User: allona
 * Date: 15/05/12
 */
@Service
public class AgrupacionClienteServiceImpl implements AgrupacionClienteService {

    @Autowired
    AgrupacionClienteRepository repository;

    @Autowired
    ClienteRepository clienteRepository;

    @Autowired
    private DTOMapperService mapperService;

    public List<AgrupacionCliente> findByIds(List<Long> ids) {
       return repository.findByIds(ids);
    }
    public List<AgrupacionClienteDTO> findAll() {
        List<AgrupacionCliente> cadenas=repository.findAll();
        List<AgrupacionClienteDTO> resultado=new ArrayList<AgrupacionClienteDTO>();

        for(AgrupacionCliente model:cadenas){
            AgrupacionClienteDTO dto= mapperService.map(model, AgrupacionClienteDTO.class);
            resultado.add(dto);
        }
        return resultado;
    }

    public List<AgrupacionCliente> findAllCadenas() {
        return repository.findAll();
    }


    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void save(AgrupacionClienteDTO cadenaDTO,boolean updateMode) {
        AgrupacionCliente cadena=mapperService.map(cadenaDTO, AgrupacionCliente.class);
        if(updateMode){
            repository.merge(cadena);
        }else{
            repository.persist(cadena);
        }
    }

    @Transactional
    public void update(AgrupacionClienteDTO anterior) {
        AgrupacionCliente cadena=mapperService.map(anterior, AgrupacionCliente.class);
        repository.merge(cadena);
    }

    @Transactional
    public AgrupacionCliente findByCode(Long code){
        return repository.find(code);
    }

    @Transactional
    public List<AgrupacionCliente> findByRUC(String ruc) {
        List<AgrupacionCliente> list = new ArrayList<AgrupacionCliente>();
        if(ruc!=null){
            list= repository.findByRUC(ruc);
        }
        return list;
    }
}
